home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
BARNET
/
ARMLINUX
/
ACORN-CD-PATCH
next >
Wrap
Text File
|
1998-04-12
|
4KB
|
106 lines
diff -ur linux/fs/isofs/dir.c linuxn/fs/isofs/dir.c
--- linux/fs/isofs/dir.c Tue Jul 23 08:26:40 1996
+++ linuxn/fs/isofs/dir.c Sun Mar 22 17:17:08 1998
@@ -104,6 +104,32 @@
return i;
}
+/* Acorn extensions written by Matthew Wilcox <willy@bofh.ai> 1998 */
+int get_acorn_filename(struct iso_directory_record * de,
+ char * retname, struct inode * inode)
+{
+ int std;
+ unsigned char * chr;
+ int retnamlen = isofs_name_translate(de->name,
+ de->name_len[0], retname);
+ if (retnamlen == 0) return 0;
+ std = sizeof(struct iso_directory_record) + de->name_len[0];
+ if (std & 1) std++;
+ if ((*((unsigned char *) de) - std) != 32) return retnamlen;
+ chr = ((unsigned char *) de) + std;
+ if (strncmp(chr, "ARCHIMEDES", 10)) return retnamlen;
+ if ((*retname == '_') && ((chr[19] & 1) == 1)) *retname = '!';
+ if (((de->flags[0] & 2) == 0) && (chr[13] == 0xff)
+ && ((chr[12] & 0xf0) == 0xf0))
+ {
+ retname[retnamlen] = ',';
+ sprintf(retname+retnamlen+1, "%3.3x",
+ ((chr[12] & 0xf) << 8) | chr[11]);
+ retnamlen += 4;
+ }
+ return retnamlen;
+}
+
/*
* This should _really_ be cleaned up some day..
*/
@@ -263,6 +289,14 @@
continue;
}
+ if (inode->i_sb->u.isofs_sb.s_mapping == 'a') {
+ len = get_acorn_filename(de, tmpname, inode);
+ if (filldir(dirent, tmpname, len, filp->f_pos, inode_nu
mber) < 0)
+ break;
+ dcache_add(inode, tmpname, len, inode_number);
+ filp->f_pos += de_len;
+ continue;
+ } else
if (inode->i_sb->u.isofs_sb.s_mapping == 'n') {
len = isofs_name_translate(name, len, tmpname);
if (filldir(dirent, tmpname, len, filp->f_pos, inode_nu
mber) < 0)
diff -ur linux/fs/isofs/inode.c linuxn/fs/isofs/inode.c
--- linux/fs/isofs/inode.c Fri Aug 15 19:11:45 1997
+++ linuxn/fs/isofs/inode.c Sun Mar 22 16:32:10 1998
@@ -78,7 +78,7 @@
{
char *this_char,*value;
- popt->map = 'n';
+ popt->map = 'a';
popt->rock = 'y';
popt->cruft = 'n';
popt->unhide = 'n';
@@ -105,10 +105,11 @@
if ((value = strchr(this_char,'=')) != NULL)
*value++ = 0;
if (!strcmp(this_char,"map") && value) {
- if (value[0] && !value[1] && strchr("on",*value))
+ if (value[0] && !value[1] && strchr("ano",*value))
popt->map = *value;
else if (!strcmp(value,"off")) popt->map = 'o';
else if (!strcmp(value,"normal")) popt->map = 'n';
+ else if (!strcmp(value,"acorn")) popt->map = 'a';
else return 0;
}
else if (!strcmp(this_char,"check") && value) {
diff -ur linux/fs/isofs/namei.c linuxn/fs/isofs/namei.c
--- linux/fs/isofs/namei.c Tue Aug 12 22:06:35 1997
+++ linuxn/fs/isofs/namei.c Sun Mar 22 16:36:58 1998
@@ -156,6 +156,9 @@
rrflag = get_rock_ridge_filename(de, &dpnt, &dlen, dir);
if (rrflag) {
if (rrflag == -1) goto out; /* Relocated deep directory */
+ } else
+ if(dir->i_sb->u.isofs_sb.s_mapping == 'a') {
+ dlen = get_acorn_filename(de, dpnt, dir);
} else {
if(dir->i_sb->u.isofs_sb.s_mapping == 'n') {
for (i = 0; i < dlen; i++) {
diff -ur linux/include/linux/iso_fs.h linuxn/include/linux/iso_fs.h
--- linux/include/linux/iso_fs.h Sat Nov 22 20:09:34 1997
+++ linuxn/include/linux/iso_fs.h Sun Mar 22 16:38:41 1998
@@ -146,6 +146,7 @@
extern char * get_rock_ridge_symlink(struct inode *);
extern int find_rock_ridge_relocation(struct iso_directory_record *, struct in
ode *);
+int get_acorn_filename(struct iso_directory_record *, char *, struct inode *);
/* The stuff that follows may be totally unneeded. I have not checked to see
which prototypes we are still using. */